import * as XLSX from 'xlsx';

/**
 * 导出数据到Excel
 * @param {Array} data 要导出的数据数组
 * @param {String} fileName 导出的文件名（不带扩展名）
 * @param {Object} options 可选配置
 * @param {Array} options.headers 自定义表头 [{label: '显示名称', key: 'dataKey'}]
 */
export const exportToExcel = (data, fileName = '导出数据', options = {}) => {
  if (!data || data.length === 0) {
    console.error('导出数据为空');
    return;
  }

  try {
    // 处理数据格式
    let exportData = data;
    
    // 如果有自定义表头
    if (options.headers && options.headers.length > 0) {
      exportData = data.map(item => {
        const newItem = {};
        options.headers.forEach(header => {
          newItem[header.label] = item[header.key];
        });
        return newItem;
      });
    }

    // 创建工作簿
    const wb = XLSX.utils.book_new();
    const ws = XLSX.utils.json_to_sheet(exportData);
    
    // 添加工作表到工作簿
    XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
    
    // 生成Excel文件并下载
    const finalFileName = `${fileName}_${new Date().toISOString().slice(0, 10)}.xlsx`;
    XLSX.writeFile(wb, finalFileName);
    
    return true;
  } catch (error) {
    console.error('导出Excel失败:', error);
    throw error;
  }
};

/**
 * 基于查询条件导出合同数据
 * @param {Object} queryParams 查询参数
 * @param {String} fileName 导出的文件名
 */
export const exportContractsByQuery = async (queryParams, fileName = '合同列表') => {
  try {
    // 调用查询接口获取数据
    const response = await fetch('http://localhost:1026/api/contracts/search', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify(queryParams)
    });
    
    if (!response.ok) {
      throw new Error('获取合同数据失败');
    }
    
    const result = await response.json();
    
    if (!result.success || !result.data || result.data.length === 0) {
      throw new Error('没有可导出的数据');
    }
    
    // 准备导出数据
    const exportData = result.data.map(item => ({
      '合同编号': item.contractNumber,
      '合同名称': item.title,
      '申请人': item.applicant,
      '企业名称': item.companyName,
      '企业地址': item.companyAddress,
      '合同类型': item.contractType,
      '生效日期': item.startDate,
      '到期日期': item.endDate,
      '合同状态': item.contractStatus,
      '创建时间': item.createdAt,
      '更新时间': item.updatedAt
    }));
    
    // 调用导出函数
    exportToExcel(exportData, fileName);
    
    return true;
  } catch (error) {
    console.error('导出合同失败:', error);
    throw error;
  }
};